package reflect;
/**
 * 通过字节码对象获取构造方法对象，并通过构造方法对象构建类的实例对象
 */

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class ConstructorDemo01 {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        //获取类的字节码对象（类对象），应用反射的入口
        Class c1 = Integer.class;
        //获取类中只有一个int类型参数的构造方法塑像
        Constructor constructor = c1.getConstructor(int.class);
        //通过构造方法对象构建类的实例对象（底层new Integer(100)）
        Object o1 = (Integer) constructor.newInstance(100);
        Object o2 = (Integer) constructor.newInstance(100);
        System.out.println(o1);
        System.out.println(o1==o2); //false
        constructor = c1.getConstructor(String.class);
        Object o3= (Integer) constructor.newInstance("100");
        System.out.println(o3); //100
    }
}
